---
title: "NBA Stats"
output:
flexdashboard::flex_dashboard:
theme:
version: 4
bootswatch: default
navbar-bg: "#3b5998"
orientation: columns
vertical_layout: fill
source_code: embed
---
<style>
.chart-title
{
/* chart_title */
font-size: 18px;
font-family: Arial;
}
body
{
/* Normal */
font-size: 16px;
}
</style>
<style>
.dataTables_scrollBody {
height:500px !important;
max-height:500px !important;
}
.chart-stage-flex {
overflow:auto !important;
}
</style>
```{css color tabs}
/* Set font color of inactive tab to green */
.nav-tabs-custom .nav-tabs > li > a
{
color: blue;
}
/* Set font color of active tab to red */
.nav-tabs-custom .nav-tabs > li.active > a
{
color: purple;
}
/* To set color on hover */
.nav-tabs-custom .nav-tabs > li.active > a:hover
{
color: black;
}
<style type="text/css"> .sidebar
{
overflow: auto;
}
</style>
```
```{r setup, include=FALSE}
library(flexdashboard)
```
```{r, data/packages}
library(pacman)
pacman::p_load(tidyverse, rvest, stringr,
ggplot2, forcats, writexl,
maps, viridis, scales,
plotly, GGally)
```
```{r scraping & cleaning (salary)}
link = "https://hoopshype.com/salaries/players/"
page = read_html(link)
name = page %>%
html_nodes("tbody .name") %>% html_text()
salary = page %>%
html_nodes("tbody .hh-salaries-sorted") %>% html_text()
name <- trimws(trimws(name, "left", "\\w"), "right", "\n")
name <- trimws(trimws(name, "left", "\\w"), "right", "\t")
name <- trimws(trimws(name, "left", "\\w"), "left", "\n")
name <- trimws(trimws(name, "left", "\\w"), "left", "\t")
salary <- trimws(trimws(salary, "left", "\\w"), "right", "\t")
salary <- trimws(trimws(salary, "left", "\\w"), "left", "\n")
salary <- trimws(trimws(salary, "left", "\\w"), "left", "\t")
salary <- trimws(trimws(salary, "left", "\\w"), "left", "\\$")
nba_salary <- data.frame(name, salary)
salary <- gsub(",", "", nba_salary$salary)
nba_salary$salary <- salary
nba_salary$salary <- as.numeric(nba_salary$salary)
```
```{r scraping & cleaning (stats)}
#link2 = "https://basketball.realgm.com/nba/stats/2023/Averages/Qualified/points/All/desc/1/Regular_Season"
nba_stats = data.frame()
for (pages in c(1,2,3))
{
link2 = paste0("https://basketball.realgm.com/nba/stats/2023/Averages/Qualified/points/All/desc/", pages, "/Regular_Season")
page2 = read_html(link2)
name = page2 %>%
html_nodes(".nowrap") %>% html_text()
team = page2 %>%
html_nodes(".nowrap+ td") %>% html_text()
gp = page2 %>%
html_nodes("td:nth-child(4)") %>% html_text()
mpg = page2 %>%
html_nodes("td:nth-child(5)") %>% html_text()
ppg = page2 %>%
html_nodes("td:nth-child(6)") %>% html_text()
fgm = page2 %>%
html_nodes("td:nth-child(7)") %>% html_text()
fga = page2 %>%
html_nodes("td:nth-child(8)") %>% html_text()
fgp = page2 %>%
html_nodes("td:nth-child(9)") %>% html_text()
tpm = page2 %>%
html_nodes("td:nth-child(10)") %>% html_text()
tpa = page2 %>%
html_nodes("td:nth-child(11)") %>% html_text()
tpp = page2 %>%
html_nodes("td:nth-child(12)") %>% html_text()
ftm = page2 %>%
html_nodes("td:nth-child(13)") %>% html_text()
fta = page2 %>%
html_nodes("td:nth-child(14)") %>% html_text()
ftp = page2 %>%
html_nodes("td:nth-child(15)") %>% html_text()
nba_stats <- rbind(nba_stats, as.data.frame(cbind(name, team, gp, ppg, fgm, fga, fgp, tpm, tpa, tpp, ftm, fta, ftp)))
print("Page:", pages)
}
nba_stats <- nba_stats %>% mutate_at(c("ppg", "fgm", "fga",
"fgp", "tpm", "tpa",
"tpp", "ftm", "fta", "ftp"), as.numeric)
```
```{r merge data}
nba <- left_join(nba_stats, nba_salary, by = "name")
```
Data Table
===
Row
-----------------------------------------------------------------------
```{r data table}
DT::datatable(nba[,1:13], rownames = FALSE,
options = list(columnDefs = list(list(className = 'dt-center', targets = 1:12))))
```